package bit_operation;

import java.util.HashMap;
import java.util.Map;

public class singleNumber2 {
    /**位运算
     *
     */
    public int singleNumber2(int[] nums) {
        int ret = 0;
        for(int i = 0 ; i<32;i++) {//依次修改ret中每个比特位
            int sum = 0;
            for(int x:nums) {//统计nums中所有数的第i位比特位的和
                if(((x>>i)&1) == 1) {
                    sum++;
                }
            }
            sum %= 3;
            if(sum == 1) {
                ret = ret | (1<<i);
            }
        }
        return ret;

    }
    /**
     *  HashMap 实现
     * @param nums
     * @return
     */
    public int singleNumber(int[] nums) {
        Map<Integer,Integer> hash = new HashMap<>();
        for(int x:nums) {
            hash.put(x,hash.getOrDefault(x,0)+1);
        }
        for(Map.Entry<Integer,Integer> keys : hash.entrySet()){
            if(keys.getValue() == 1) {
                return keys.getKey();
            }
        }
        return -1;
    }
}
